package com.bbz.spring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 自动装配：
 *      Spring 利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值
 *  1:@Autowired
 *  {
 *      1:默认优先按照类型去容器中找对应的组件。
 *      2：如果找到多个相同类型的组件，按照属性的名称去作为组件的id去容器中查找。
 *      3：@Qualifier("bookDao")，指定使用的id
 *      4: 自动装配 默认一定要将属性赋值好，没有就报错。
 *      5:  @Autowired(required = false)  如果没有找到要依赖的组件，也不报错。设置为null
 *      6:@Primary 当有过个相同类型的Bean需要加载到容器中,通过@primary设置组件注册容器优先级。
 *  }
 *  2：spring 还支持使用@Resource(JSR250)和@Inject(JSR330) java规范 不建议使用
 *
 *  3：@Autowired 可以标注在构造器，方法，参数，属性，
 *
 *  4：自定义组件想要使用spring 容器中底层的一些组件，例如ApplicationContext,BeanFactory 等等...
 *     自定义组件 xxxAware接口，在创建对象的时候，会调用接口规定的方法，注入相关的组件。
 *     xxxAware 功能使用xxxAwareProcessor，xxxProcessor实现BeanPostProcessor接口实现postProcessBeforeInitialization()方法，
 *     在方法里面判断当前Bean属于哪个Aware,找到属于的Aware的实现类，然后将IOC容器注入到实现类中。
 *
 */
@Configuration
@ComponentScan({"com.bbz.spring.Controller","com.bbz.spring.Service","com.bbz.spring.Dao","com.bbz.spring.bean"})
public class MainConfig5 {
}
